// 树状数组范围增加、单点查询模版
// 测试链接 : https://www.luogu.com.cn/problem/P3368
// 提交以下的code，可以直接通过

#include <bits/stdc++.h>

using namespace std;

const int MAXN = 500001;
// 原始数组的信息，根据课上说的关系，维护在树状数组中
// 注意下标一定从1开始，不从0开始
int tree[MAXN];
int n, m;

inline int read()
{
    char ch = getchar();
    int x = 0, f = 1;
    while(ch < '0' || ch > '9')
    {
        if(ch == '-') f = -1;
        ch = getchar();
    }
    while(ch >= '0' && ch <= '9')
    {
        x = 10 * x + ch - '0';
        ch = getchar();
    }
    return f * x;
}

// 得到i最右侧的1的状态
// 其他位都是0
int lowbit(int i)
{
    return i & -i;
}

void add(int i, int v)
{
    while(i <= n)
    {
        tree[i] += v;
        i += lowbit(i);
    }
}

// 返回1~i范围累加和
int sum(int i)
{
    int ans = 0;
    while(i > 0)
    {
        ans += tree[i];
        i -= lowbit(i);
    }
    return ans;
}

int main()
{
    n = read(), m = read();
    for(int i = 1, v; i <= n; ++i)
    {
        v = read();
        add(i, v);
        add(i + 1, -v);
    }
    for(int i = 1; i <= m; ++i)
    {
        int op = read();
        if(op == 1)
        {
            int l = read();
            int r = read();
            int v = read();
            add(l, v);
            add(r + 1, -v);
        }
        else
        {
            int index = read();
            printf("%d\n", sum(index));
        }
    }

    return 0;
}